#/*************************************************************************
#    > File Name: Lib/Value_Calculation.py
#    > Author: Yan Wang
#    > Mail: wangyan@imnu.edu.cn
#    > Created Time: 2022年05月26日 星期四 15时24分07秒
# ************************************************************************/
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Library import *
from List_Operation import *


# 将需要替换的参量值带入到需要替换的句子当中。
# 输出为被替换的句子列表
# 输入为一个 DF, DF中用于替换的列由 origin_content_list提供

def Mapping_DF_to_Sentence(df, input_value_list=[], origin_content_list={},lines=[]):
    param_list_all = []
    print("lines",df, input_value_list, origin_content_list, lines)
    if isinstance(lines,int):
        lines=np.arange(lines)+1
    elif not lines:
        lines=np.arange(len(df))+1

    for line_num in lines:
        param_list = []
        for var in input_value_list:
            # 将变量写为科学表达式
            value = df.loc[line_num-1][var]
            value_sci = Switch_Scitific_Counting(value)
            # 将param_card文件对应行中的值替换为给定参数值
            replaced_word = origin_content_list[var].format(value_sci)
            param_list.append(replaced_word)
        param_list_all.append(param_list)
    return(param_list_all)

# 将需要替换的参量值带入到需要替换的句子当中。
# 输出为被替换的句子列表
# 输入为一个 {A:[a1, a2, a3], B:[b1, b2, b3], C:[c1, c2, c3]}格式的dict, dict中用于替换的列由 origin_content_list提供, dict中列表中的每一个元素均替换一次。
def Mapping_DictList_to_Sentence(input_dict, input_value_list=[], origin_content_list={}, df_lines=[]):
    param_list_all = []
    if isinstance(df_lines,int):
        df_lines=np.arange(df_lines)+1
    elif not df_lines:
        # 取dict中第一个元素， 查看它的长度（前面会根据node_num，将完整的df分割为几行，每行又包含数个元素， 这里查询的相当于有多少行，即node_num的大小）
        # 根据长度创建一个完整的循环列表
        df_lines=np.arange(len(input_dict[list(input_dict.keys())[0]]))+1

####print("input_dict",input_dict)
####print("input_value_list",input_value_list)
####print("origin_content_list",input_dict)
    for line_num in df_lines:
        param_list = []
        for key in input_value_list:
            value = input_dict[key][line_num-1]
            replaced_word = origin_content_list[key].format(value)
            param_list.append(replaced_word)
        else:
            param_list_all.append(param_list)
    else:
        return param_list_all


# 将需要替换的参量值带入到需要替换的句子当中。
# 输出为被替换的句子列表
# 输入为一个 {A:[a], B:[b], C:[c]}格式的dict, dict中用于替换的列由 origin_content_list提供, dict中的列表整体替换一次
def Mapping_Dict_to_Sentence(input_dict, input_value_list=[], origin_content_list={}):
    param_list = []
    for key in input_value_list:
        # 将变量写为科学表达式
        value = input_dict[key]
        # 将param_card文件对应行中的值替换为给定参数值
        replaced_word = origin_content_list[key].format(value)
        param_list.append(replaced_word)
    return(param_list)


# 整合Mapping函数， 使其更易于操作
# 生成一个列表，列表的每一项为dict中的一个value做了对应替换后的结果
# 以下函数只适用于一个参数的替换，多个参数可以使用 Trans_MultiValue_to_Dict
def Get_Replace_Sentence(to_replace_dict, origin_list):
    input_value_list=Get_Maplist_Key(origin_list)   #返回origin_list所有的key
    replaced_list= Mapping_Dict_to_Sentence(to_replace_dict,input_value_list,origin_list)   #针对每一个key，只替换一次
    return(replaced_list)

